#include<vector>
#include<string>
#include<iostream>
using namespace std;


//vector<vector<int>> ret;
//vector<int> path;
//int aim;
//void dfs(vector<int>& candidates, int pos, int sum)
//{
//    if (sum == aim)
//    {
//        ret.push_back(path);
//        return;
//    }
//    if (sum > aim || pos == candidates.size())
//    {
//        return;
//    }
//
//    for (int i = pos; i < candidates.size(); i++)
//    {
//        path.push_back(candidates[i]);
//        dfs(candidates, i, sum + candidates[i]);
//        path.pop_back();
//    }
//}
//vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
//    aim = target;
//    dfs(candidates, 0, 0);
//    return ret;
//}

vector<string> ret;
string path;
void dfs(string s, int pos)
{
    if (path.size() == s.size())
    {
        ret.push_back(path);
        return;
    }

    if ((s[pos] >= 'a' && s[pos] <= 'z') || (s[pos] >= 'A' && s[pos] <= 'Z'))
    {
        path.push_back((char)toupper(s[pos]));
        dfs(s, pos + 1);
        path.pop_back();

        path.push_back((char)tolower(s[pos]));
        dfs(s, pos + 1);
        path.pop_back();
    }
    else
    {
        path.push_back(s[pos]);
        dfs(s, pos + 1);
        path.pop_back();
    }
}
vector<string> letterCasePermutation(string s) {
    dfs(s, 0);
    return ret;
}

int main()
{
	vector<int> v{ 2,2,3 };
    //combinationSum(v, 8);

	string s("a");
	cout << s[0];
	cout << (char)toupper(s[0]);
	cout << (char)tolower(s[0]);

    letterCasePermutation("a1b3");

	return 0;
}